package com.corpgovernment.organization.service;

import com.corpgovernment.api.organization.model.post.ListPostByConditionRequest;
import com.corpgovernment.api.organization.model.post.ListPostByConditionResponse;
import com.corpgovernment.api.organization.model.post.PostVo;
import com.corpgovernment.common.base.BaseUserInfo;
import com.corpgovernment.common.base.Page;
import com.corpgovernment.organization.entity.SyncOrganizationRequestEntity.SyncOrganizationInfoEntity.PostInfoEntity;
import com.corpgovernment.organization.entity.db.MbOrgInfo;
import com.corpgovernment.organization.entity.db.MbPostInfo;

import java.util.List;

/**
 * 岗位service
 *
 * @author wangyujue
 */
public interface IPostService {


    /**
     * 通过组织结构id查找岗位列表
     *
     * @param orgId 组织结构id
     * @return 岗位列表
     */
    List<MbPostInfo> listByOrgId(String orgId);
    public List<MbPostInfo> listByOrgId(String orgId, List<MbOrgInfo> allMbOrgInfoList);
    /**
     * 查询单个
     *
     * @param id
     * @return
     */
    MbPostInfo find(Long id);

    /**
     * 查询列表
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    Page list(Integer pageNum, Integer pageSize);

    /**
     * 查询总数
     *
     * @return
     */
    int count();

    /**
     * 保存
     *
     * @param mbPostInfo
     * @return
     */
    boolean save(MbPostInfo mbPostInfo);

    /**
     * 更新
     *
     * @param mbPostInfo
     * @return
     */
    boolean update(MbPostInfo mbPostInfo);


    /**
     * 删除
     *
     * @param id
     * @return
     */
    boolean delete(Long id);

    /**
     * 删除
     */
    boolean deleteByOrgIdAndName(String orgId, List<String> positionNameList);

    /**
     * 通过name查找岗位列表
     *
     * @param name
     * @return
     */
    List<MbPostInfo> findByName(String name);

    /**
     * 通过name查找岗位列表
     *
     * @param nameList
     * @return
     */
    List<MbPostInfo> findByNameAndOrgId(List<String> nameList, String orgId);


    /**
     * 通过name模糊搜索
     *
     * @param name
     * @return
     */
    List<MbPostInfo> findByLikeName(List<String> orgIds, String name);

    /**
     * 通过name,orgId查找岗位列表
     *
     * @param name
     * @param orgId
     * @return
     */
    MbPostInfo findByNameAndOrgId(String name, String orgId);

    /**
     * 通过code,orgId查找职级列表
     *
     * @param code
     * @param orgId
     * @return
     */
    MbPostInfo findByCodeAndOrgId(String code, String orgId);

    /**
     * 通过组织结构ids删除岗位
     *
     * @param orgIds
     * @return
     */
    boolean deleteByOrgIds(List<String> orgIds);

    /**
     * 删除岗位及清除岗位关系
     *
     * @param postId
     * @return
     */
    boolean deletePostAndRelationById(Long postId);

    /**
     * 通过uId,orgId查找岗位
     */
    MbPostInfo listPostByOrgIdAndUid(String orgId, String uId);

    /**
     * 通过uId,orgId查找岗位
     */
    PostVo listPostByUidAndOrgId(String uId, String orgId);

    /**
     * @param postIds
     * @return
     */
    List<MbPostInfo> listByPostIds(List<Long> postIds);

    /**
     * 创建职级
     *
     * @param postInfo
     * @param orgId
     * @return
     */
    boolean createPost(PostInfoEntity postInfo, String orgId);

    List<MbPostInfo> listByOrgIds(List<String> orgIds);

    boolean createPost(String name, String orgId);

    boolean createPostAndReturn(MbPostInfo mbPostInfo);

	List<PostVo> listPostByOrgId(String orgId);

	int batchInsertPostInfo(List<MbPostInfo> mbPostInfoList);

    /**
     * 查询数据权限内所有岗位信息
     *
     * @param request
     * @param baseUserInfo
     * @return
     */
    ListPostByConditionResponse listPostByCondition(ListPostByConditionRequest request, BaseUserInfo baseUserInfo);
}